
//preloading.....
load("library/common.js");

JEuler.system.loadJS("library/math.js");

(function() {

    //JEuler.system.loadJS("data/???.dat");
    JEuler.system.printCaption("087");
    JEuler.system.startTimerCount();
    
    var LIMIT = 50000000;
    JEuler.math.PrimeUtils.sievePrime(Math.floor(Math.sqrt(LIMIT))+1);
    JEuler.math.PrimeUtils.printCachedPrimes("v");
    
    var primes = JEuler.math.PrimeUtils.getPrimePool();
    var primes2 = [], primes3 = [], primes4 = [], p;
    for(var i=0; i<primes.length; i++) {
        p = primes[i];
        primes2[i] = p*p;
    }
    for(var i=0; i<primes.length; i++) {
        p = primes[i];
        primes3[i] = p*primes2[i];
        if(primes3[i]>=LIMIT) {
            primes3.pop();
            break;
        }
    }
    for(var i=0; i<primes.length; i++) {
        p = primes[i];
        primes4[i] = p*primes3[i];
        if(primes4[i]>=LIMIT) {
            primes4.pop();
            break;
        }
    }    
    
    //print(primes2);
    //print(primes3);
    //print(primes4);
    
    var count=0, cache=[];
    for(var i=0; i<primes2.length; i++) {
        for(var j=0; j<primes3.length; j++) {
            for(var k=0; k<primes4.length; k++) {
                var a = primes2[i] + primes3[j] + primes4[k];
                if(a<LIMIT && !cache[a]) {
                    count++;
                    cache[a]=1;
                    //print(a + "=" + primes[i] + "^2+" + primes[j] + "^3+" + primes[k] + "^4");
                }
            }
        }
    }
    
    


    JEuler.system.print("SUM=" + count);
    JEuler.system.printTimerCount();
    
})();
